Computer systems that display two-dimensional (2D) images of three-dimensional (3D) scenes typically include a sequence of image processing stages collectively referred to as a graphics pipeline. In some systems, one or more stages of the graphics pipeline are implemented by a programmed host processor. Other stages, such as rasterization and video signal generation stages, are usually implemented in dedicated hardware.
A most cases a graphics pipeline includes a geometry transformation stage, a rasterization stage and a video signal generation stage. In the geometry transformation stage, coordinates of objects in a 3D scene are mathematically transformed into a set of 2D coordinates. The effect of this transformation is to project the 3D scene onto an image plane that is positioned to achieve a given perspective view. The set of 2D coordinates are further processed into coordinates that define regions of homogeneous color and texture. These region-defining coordinates are then supplied to the rasterization stage where they are processed by a rasterizer.
The rasterizer determines which pixels on the computer display need to be updated for each set of region-defining coordinates received from the geometry transformation stage. This is accomplished by comparing the coordinates of pixels on the display against region boundaries to determine whether a given pixel is inside or outside the region. If a pixel is completely or partially inside the region, the rasterizer computes a shading value (a color or gray-scale value) for the pixel and writes the shading value to a storage location in a frame buffer that maps the pixel on the display. If a pixel is not inside or partially inside the region, the corresponding frame buffer location is not updated.
In the video signal generation stage, a video signal generator, sometimes referred to as a "video engine", continually scans the frame buffer to generate a video signal. In many cases, the video signal generator uses the frame buffer data to look up more resolute color values in color look-up tables, and then uses the more resolute color values to index yet other look-up tables to generate color data adjusted to account for the characteristics of a particular display.
One disadvantage of prior-art graphics pipelines is that the frame-rate tends to fluctuate based on the graphic complexity of the scene being displayed. For example, scenes having greater graphic complexity (e.g., relatively large number of objects, clipped objects, off-axis orientation of objects, object occlusion, alpha blending, complex shading or texture, etc.) take longer to rasterize than scenes having less graphic complexity. Thus, when a scene contains only a few, relatively low-detail graphics objects, the frame rate is relatively fast. As the number of objects or the graphical detail of the objects increases, the frame rate slows down.
In some prior-art graphics pipelines, the frame-rate can fluctuate between as much as one-third to three-times the average frame rate. Such frame-rate fluctuations are highly distractive to a human operator and produce the sensation of moving between slow-motion and fast-forward. In application programs that require hand-eye coordination (e.g., video games), frame-rate fluctuations make it difficult for users to calibrate their hand or finger motions to events in the displayed images.
Another disadvantage of prior-art systems is that, particularly in systems that rely on the host processor to implement one or more stages of the graphics pipeline, the frame-rate tends to vary based on the processing capability of the host platform. That is, less computationally powerful systems tend to exhibit slower frame-rates because the host processor takes longer to perform graphics processing.
In one prior-art technique for addressing disparities in processing capability, called "level-of-detail management" multiple instances of graphics objects are provided, with each instance of a given graphics object being progressively more graphically complex than another instance. For example, in a combat-type video game in which the player and computer respectively control the on-screen motions of combatant characters, each of the characters are typically stored in multiple instances having incrementally different levels of graphical detail. When the game program is started, the processing capability of the computer system is determined and character instances having an appropriate level of graphical complexity are selected for display.
Unfortunately, the above-described technique does not address frame-rate fluctuations caused by varying graphical complexity between scenes or frame-rate fluctuations caused by time-varying graphical complexity within a single scene. Further, for multi-tasking computer systems in which processing capability is time-varying function of processor loading, application programs which statically select a level of graphical complexity are still subject to frame-rate fluctuations as the host processor starts and stops executing other tasks.